package com.billdowney.util.media;

import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.MultimediaInfo;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

import com.billdowney.util.file.FileUtil;

/**
 * @ClassName: VideoUtil
 * @Description: 视频工具类
 * @author 超级小富翁 - BillDowney
 * @date 2018年8月1日 下午7:22:00
 */
public class VideoUtil {

	public static void main(String[] args) {
		String filePath = "E:\\video\\你的名字[DVD版].mp4";
		System.out.println(getVideoInfo(filePath));
	}

	/**
	 * @Function: getVideoInfo
	 * @Description: 根据视频文件获取视频信息
	 * @param filePath
	 *            视频的文件路径
	 * @return 封装好的VideoInfo类
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2018年8月1日 下午8:54:34
	 */
	public static VideoInfo getVideoInfo(String filePath) {
		try {
			return getVideoInfo(new File(filePath));
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public static VideoInfo getVideoInfo(File source) {
		VideoInfo videoInfo = new VideoInfo();
		Encoder encoder = new Encoder();
		FileChannel fc = null;
		FileInputStream fis = null;
		try {
			MultimediaInfo m = encoder.getInfo(source);
			fis = new FileInputStream(source);
			fc = fis.getChannel();
			// 视频名称
			videoInfo.setVideoName(source.getName());
			// 视频后缀名
			videoInfo.setVideoSuffix(FileUtil.getFileSuffix(videoInfo.getVideoName()));
			// 视频本地文件路径
			videoInfo.setLocalFilePath(source.getPath());
			// 视频本地路径
			videoInfo.setLocalPath(videoInfo.getLocalFilePath().replace(videoInfo.getVideoName(), ""));
			// 视频时长
			videoInfo.setTime(m.getDuration());
			// 视频高度
			videoInfo.setHeight(m.getVideo().getSize().getHeight());
			// 视频宽度
			videoInfo.setWidth(m.getVideo().getSize().getWidth());
			// 视频编码
			videoInfo.setDecoder(m.getVideo().getDecoder());
			// 视频帧速率
			videoInfo.setFrameRate(m.getVideo().getFrameRate());
			// 视频格式
			videoInfo.setFormat(m.getFormat());
			// 视频大小
			videoInfo.setSize(fc.size());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != fc) {
				try {
					fc.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return videoInfo;
	}

}
